package code08_常用类.泛类;

/**
 * @author 黄衡熙
 * @version 1.0
 */
public class Emp <T,V,K,E> {
    public void show(T t, V v, K k, E e) {
        System.out.println(t);
        System.out.println(v);
        System.out.println(k);
        System.out.println(e);
    }

    //?extends B表示指定了泛型的上限。泛型的参数类型必须是B的子类
    public Student<? extends B> test01() {
        // return new Student<A>();//父类报错
        // return new Student<B>();//B本身可以
        return new Student<C>();//C是B的子类也可以
        //return new Student<D>();//D与B都属于A的子类，与B无关，报错
    }

    //？suoer C表示指定了泛型的下限，泛型的参数类型必须是C一级的或者C的祖宗类
    public Student<? super C> test02() {
        // return new Student<A>();    // A是C的父类的父类,可以
        // return new Student<B>();       // B是C的父类,可以
        return new Student<C>();       // C是本身,可以
        // return new Student<D>();       // D与C无关,报错
    }
}
class A {

}

    class B extends A {

    }

    class C extends B {

    }

    class D extends A {

    }

    class Test04 {
        public static void main(String[] args) {
            Emp<String, Integer, Double, Boolean> emp = new Emp<>();
            emp.show("admin", 1, 3.14, true);
        }
    }

